home *** CD-ROM | disk | FTP | other *** search
- package koala.dynamicjava.interpreter;
-
- import java.lang.reflect.Modifier;
- import java.util.Iterator;
- import java.util.LinkedList;
- import koala.dynamicjava.classinfo.ClassInfo;
- import koala.dynamicjava.classinfo.FieldInfo;
- import koala.dynamicjava.classinfo.MethodInfo;
- import koala.dynamicjava.interpreter.error.ExecutionError;
- import koala.dynamicjava.tree.BlockStatement;
- import koala.dynamicjava.tree.BooleanLiteral;
- import koala.dynamicjava.tree.ClassInitializer;
- import koala.dynamicjava.tree.DoubleLiteral;
- import koala.dynamicjava.tree.Expression;
- import koala.dynamicjava.tree.FieldDeclaration;
- import koala.dynamicjava.tree.FloatLiteral;
- import koala.dynamicjava.tree.Identifier;
- import koala.dynamicjava.tree.InstanceInitializer;
- import koala.dynamicjava.tree.IntegerLiteral;
- import koala.dynamicjava.tree.Literal;
- import koala.dynamicjava.tree.LongLiteral;
- import koala.dynamicjava.tree.MethodDeclaration;
- import koala.dynamicjava.tree.Node;
- import koala.dynamicjava.tree.ObjectFieldAccess;
- import koala.dynamicjava.tree.QualifiedName;
- import koala.dynamicjava.tree.ReferenceType;
- import koala.dynamicjava.tree.SimpleAssignExpression;
- import koala.dynamicjava.tree.StaticFieldAccess;
- import koala.dynamicjava.tree.visitor.VisitorObject;
-
- public class ClassInfoCompiler$MembersVisitor extends VisitorObject {
- // $FF: synthetic field
- private final ClassInfoCompiler this$0;
-
- public Object visit(ClassInitializer var1) {
- Iterator var2 = var1.getBlock().getStatements().iterator();
-
- while(var2.hasNext()) {
- this.this$0.addToClassInitializer((Node)var2.next());
- }
-
- return null;
- }
-
- public Object visit(InstanceInitializer var1) {
- Iterator var2 = var1.getBlock().getStatements().iterator();
-
- while(var2.hasNext()) {
- this.this$0.addToInstanceInitializer((Node)var2.next());
- }
-
- return null;
- }
-
- public Object visit(FieldDeclaration var1) {
- FieldInfo var2 = this.this$0.classInfo.getField(var1);
- int var3 = var1.getAccessFlags();
- String var4 = var2.getType().getName();
- String var5 = var1.getName();
- if (this.this$0.isInterface) {
- if (Modifier.isPrivate(var3) || Modifier.isProtected(var3)) {
- var1.setProperty("errorStrings", new String[]{var5, this.this$0.classInfo.getName()});
- throw new ExecutionError("interface.field.modifier", var1);
- }
-
- var3 |= 25;
- }
-
- Expression var6 = var1.getInitializer();
- if (var6 != null) {
- if (var6 instanceof Literal && Modifier.isFinal(var3) && Modifier.isStatic(var3)) {
- if (var6 instanceof IntegerLiteral) {
- Integer var12 = (Integer)((Literal)var6).getValue();
- if (var4.equals("byte")) {
- if (var12 != var12.byteValue()) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantIntField(var3, var4, var5, var12);
- } else if (var4.equals("short")) {
- if (var12 != var12.shortValue()) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantIntField(var3, var4, var5, var12);
- } else if (var4.equals("int")) {
- this.this$0.classFactory.addConstantIntField(var3, var4, var5, var12);
- } else if (var4.equals("long")) {
- this.this$0.classFactory.addConstantLongField(var3, var4, var5, new Long(var12.longValue()));
- } else if (var4.equals("float")) {
- this.this$0.classFactory.addConstantFloatField(var3, var4, var5, new Float(var12.floatValue()));
- } else {
- if (!var4.equals("double")) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantDoubleField(var3, var4, var5, new Double(var12.doubleValue()));
- }
- } else if (var6 instanceof LongLiteral) {
- Long var13 = (Long)((Literal)var6).getValue();
- if (var4.equals("long")) {
- this.this$0.classFactory.addConstantLongField(var3, var4, var5, new Long(var13));
- } else if (var4.equals("float")) {
- this.this$0.classFactory.addConstantFloatField(var3, var4, var5, new Float(var13.floatValue()));
- } else {
- if (!var4.equals("double")) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantDoubleField(var3, var4, var5, new Double(var13.doubleValue()));
- }
- } else if (var6 instanceof FloatLiteral) {
- Float var14 = (Float)((Literal)var6).getValue();
- if (var4.equals("float")) {
- this.this$0.classFactory.addConstantFloatField(var3, var4, var5, new Float(var14));
- } else {
- if (!var4.equals("double")) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantDoubleField(var3, var4, var5, new Double(var14.doubleValue()));
- }
- } else if (var6 instanceof DoubleLiteral) {
- Double var15 = (Double)((Literal)var6).getValue();
- if (!var4.equals("double")) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantDoubleField(var3, var4, var5, new Double(var15));
- } else if (var6 instanceof BooleanLiteral) {
- Boolean var16 = (Boolean)((Literal)var6).getValue();
- if (!var4.equals("boolean")) {
- throw new ExecutionError("invalid.constant", var1);
- }
-
- this.this$0.classFactory.addConstantBooleanField(var3, var4, var5, var16);
- } else {
- String var17 = (String)((Literal)var6).getValue();
- this.this$0.classFactory.addConstantStringField(var3, var4, var5, var17);
- }
- } else {
- this.this$0.classFactory.addField(var3, var4, var5);
- Object var7 = null;
- if (Modifier.isStatic(var3)) {
- ReferenceType var8 = new ReferenceType(this.this$0.classInfo.getName());
- var7 = new StaticFieldAccess(var8, var5);
- } else {
- Identifier var18 = new Identifier("this");
- LinkedList var9 = new LinkedList();
- var9.add(var18);
- QualifiedName var11 = new QualifiedName(var9);
- var7 = new ObjectFieldAccess(var11, var5);
- }
-
- SimpleAssignExpression var19 = new SimpleAssignExpression((Expression)var7, var6);
- if (Modifier.isStatic(var3)) {
- this.this$0.addToClassInitializer(var19);
- } else {
- ((Expression)var19).setProperty("instanceInitializer", (Object)null);
- this.this$0.addToInstanceInitializer(var19);
- }
- }
- } else {
- this.this$0.classFactory.addField(var3, var4, var5);
- }
-
- return null;
- }
-
- public Object visit(MethodDeclaration var1) {
- MethodInfo var2 = this.this$0.classInfo.getMethod(var1);
- int var3 = var2.getModifiers();
- String var4 = var1.getName();
- String var5 = var2.getReturnType().getName();
- boolean var6;
- if (this.this$0.isInterface) {
- if (Modifier.isPrivate(var3) || Modifier.isProtected(var3) || Modifier.isFinal(var3) || Modifier.isStatic(var3)) {
- var1.setProperty("errorStrings", new String[]{var1.getName(), this.this$0.classInfo.getName()});
- throw new ExecutionError("interface.method.modifier", var1);
- }
-
- var3 |= 1025;
- var6 = true;
- } else {
- var6 = Modifier.isAbstract(var3);
- }
-
- ClassInfoCompiler var10000 = this.this$0;
- var10000.hasAbstractMethod |= var6;
- ClassInfo[] var7 = var2.getParameterTypes();
- String[] var8 = new String[var7.length];
-
- for(int var9 = 0; var9 < var7.length; ++var9) {
- var8[var9] = var7[var9].getName();
- }
-
- var7 = var2.getExceptionTypes();
- String[] var13 = new String[var7.length];
-
- for(int var10 = 0; var10 < var7.length; ++var10) {
- var13[var10] = var7[var10].getName();
- }
-
- this.this$0.classFactory.addMethod(var3, var5, var4, var8, var13);
- if (!this.this$0.isInterface && !var6 && this.isRedefinedMethod(var2)) {
- this.this$0.classFactory.addSuperMethodAccessor(var3, var5, var4, var8, var13);
- }
-
- BlockStatement var14 = var1.getBody();
- if ((!var6 || var14 == null) && (!this.this$0.isInterface || var14 == null)) {
- if (!var6 && var14 == null) {
- var1.setProperty("errorStrings", new String[]{var1.getName()});
- throw new ExecutionError("missing.method.body", var1);
- } else {
- if (var14 != null) {
- String var11 = ClassFactory.getMethodIdentifier(this.this$0.classInfo.getName(), var4, var8, this.this$0.interpreter.getClassLoader().toString());
- this.this$0.interpreter.registerMethod(var11, var1, this.this$0.importationManager);
- }
-
- return null;
- }
- } else {
- var1.setProperty("errorStrings", new String[]{var1.getName()});
- throw new ExecutionError("abstract.method.body", var1);
- }
- }
-
- protected boolean isRedefinedMethod(MethodInfo var1) {
- ClassInfo var2 = this.this$0.classInfo.getSuperclass();
- String var3 = var1.getName();
-
- for(ClassInfo[] var4 = var1.getParameterTypes(); var2 != null; var2 = var2.getSuperclass()) {
- MethodInfo[] var5 = var2.getMethods();
-
- label36:
- for(int var6 = 0; var6 < var5.length; ++var6) {
- if (var5[var6].getName().equals(var3)) {
- ClassInfo[] var7 = var5[var6].getParameterTypes();
- if (var7.length == var4.length) {
- for(int var8 = 0; var8 < var7.length; ++var8) {
- if (!var7[var8].equals(var4[var8])) {
- continue label36;
- }
- }
-
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- ClassInfoCompiler$MembersVisitor(ClassInfoCompiler var1) {
- this.this$0 = var1;
- }
- }
-